<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>纯函数</title>
  </head>
  <body>
    <script>
      /*
          纯函数:
              -相同的输入永远得到相同的输出，而且没有任何可观察副作用
              -可缓存 参考nodes中07.js中的 memoize实现
              -并行处理 不需要访问共享内存中的数据，所以在并行环境下可以运行任意纯函数
              -可测试 让测试更方便
              -副作用 ：如果函数依赖于外部的状态就无法保证输出相同
        */
      //数组的slice 是一个纯函数
      let array = [1, 2, 3, 4, 5];
      console.log(array.slice(0, 3));
      console.log(array.slice(0, 3));
      console.log(array.slice(0, 3));
      //数组的splice 不是一个纯函数
      console.log(array.splice(0, 2));
      console.log(array.splice(0, 2));
      console.log(array.splice(0, 2));

      //求和函数是一个纯函数
      function add(n1, n2) {
        return n1 + n2;
      }
      console.log(add(1, 2));
      console.log(add(1, 2));
      console.log(add(1, 2));

      //副作用 如果mini改变时就无法保证 输出结果相同
      let min = 18;
      function checkAge(age) {
        return age >= min;
      }
      // 改写
      // function checkAge(age) {
      //   let min = 18;
      //   return age >= min;
      // }
    </script>
  </body>
</html>
